A NAND flash memory is known as one type of a nonvolatile semiconductor memory device. Each of the memory cells of the NAND flash memory includes a charge storage layer and the threshold voltage thereof varies according to a charge amount injected into the charge storage layer and data is stored according to a difference in the threshold voltage. Further, the memory cell can store a plurality of bits by finely dividing the threshold voltage distribution.
In the NAND flash memory, recently, a variation occurs in the program characteristic due to a variation in the amount of impurities contained in the channel and a variation in the shape of the memory cell as the memory cells are further miniaturized, and the program performance tends to be degraded and the final threshold distribution width tends to become larger. The most basic method for improving deterioration in the threshold distribution is to set a step-up voltage of a program voltage applied to a word line at the program time to a smaller value. The threshold voltage variation amount of the memory cell for each program can be suppressed by reducing the step-up voltage and the final threshold distribution width can be finely divided.
However, when a small step-up voltage is used, a larger number of program loops are required to program all of the memory cells and, as a result, the program speed will be lowered.